﻿/**
 * 
 * @file FITKSEAFlatCurvedFace.h
 * @brief 平板与曲率板face类型声明
 * @author LiBaojun (libaojunqd@foxmail.com)
 * @date 2024-11-07
 * 
 */
#ifndef _FITKACOUSTICS_SEA_FLATCURVED_FACE_H___
#define _FITKACOUSTICS_SEA_FLATCURVED_FACE_H___

#include "FITKAbstractSEAFace.h"

namespace Acoustics
{
    /**
     * @brief 梁face，只有节点有效，三角形容器无效
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-11-07
     */
    class FITKAcousticsModelAPI FITKSEABeamFace :
        public FITKAbstractSEAFace
    {
        FITKCLASS(Acoustics, FITKSEAFlatPlateFace);
    public:
        /**
         * @brief Construct a new FITKSEAFlatPlateFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        explicit FITKSEABeamFace() = default;
        /**
         * @brief Destroy the FITKSEAFlatPlateFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual ~FITKSEABeamFace() = default;
        /**
         * @brief    拷贝数据，但不拷贝关联对象列表、模型数据、节点链表和三角形数据
         * @param[i] copyData
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-03-04
         */
        virtual void copy(FITKAbstractSEAFace* copyData) override;
        /**
         * @brief 获取face类型
         * @return FITKAbstractSEASubSys::SEASubSysType
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual FITKAbstractSEASubSys::SEASubSysType getFaceType() override;

    };


    /**
     * @brief 平板face
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-11-07
     */
    class FITKAcousticsModelAPI FITKSEAFlatPlateFace :
        public FITKAbstractSEAFace
    {
        FITKCLASS(Acoustics, FITKSEAFlatPlateFace);
    public:
        /**
         * @brief Construct a new FITKSEAFlatPlateFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        explicit FITKSEAFlatPlateFace() = default;
        /**
         * @brief Destroy the FITKSEAFlatPlateFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual ~FITKSEAFlatPlateFace() = default;
        /**
         * @brief    拷贝数据，但不拷贝关联对象列表、模型数据、节点链表和三角形数据
         * @param[i] copyData
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-03-04
         */
        virtual void copy(FITKAbstractSEAFace* copyData) override;
        /**
         * @brief 获取face类型
         * @return FITKAbstractSEASubSys::SEASubSysType 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual FITKAbstractSEASubSys::SEASubSysType getFaceType() override;
        
    };
    /**
     * @brief 单曲率板face
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-11-07
     */
    class FITKAcousticsModelAPI FITKSEASinglyCurvedFace :
        public FITKAbstractSEAFace
    {
        FITKCLASS(Acoustics, FITKSEASinglyCurvedFace);
    public:
        /**
         * @brief Construct a new FITKSEASinglyCurvedFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        explicit FITKSEASinglyCurvedFace() = default;
        /**
         * @brief Destroy the FITKSEASinglyCurvedFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual ~FITKSEASinglyCurvedFace() = default;
        /**
         * @brief    拷贝数据，但不拷贝关联对象列表、模型数据、节点链表和三角形数据
         * @param[i] copyData
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-03-04
         */
        virtual void copy(FITKAbstractSEAFace* copyData) override;
        /**
         * @brief 获取face类型
         * @return FITKAbstractSEASubSys::SEASubSysType 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual FITKAbstractSEASubSys::SEASubSysType getFaceType() override;

    };

    /**
     * @brief 双曲率板face
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-11-07
     */
    class FITKAcousticsModelAPI FITKSEADoublyCurvedFace :
        public FITKAbstractSEAFace
    {
        FITKCLASS(Acoustics, FITKSEADoublyCurvedFace);

    public:
        /**
         * @brief Construct a new FITKSEADoublyCurvedFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        explicit FITKSEADoublyCurvedFace() = default;
        /**
         * @brief Destroy the FITKSEADoublyCurvedFace object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        virtual ~FITKSEADoublyCurvedFace() = default;
        /**
         * @brief    拷贝数据，但不拷贝关联对象列表、模型数据、节点链表和三角形数据
         * @param[i] copyData
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-03-04
         */
        virtual void copy(FITKAbstractSEAFace* copyData) override;
        /**
         * @brief 设置环数
         * @param[i]  r              环数
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */
        void setNumberOfRing(int r);
        /**
         * @brief 获取环数
         * @return int 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */ 
        int getNumberOfRing() const;
        /**
         * @brief 获取face类型
         * @return FITKAbstractSEASubSys::SEASubSysType 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-07
         */ 
        virtual FITKAbstractSEASubSys::SEASubSysType getFaceType() override;
       
    private:
        /**
          * @brief 环数
          * @author LiBaojun (libaojunqd@foxmail.com)
          * @date 2024-11-07
          */
        int _numberOfRing{ 1 };


    };
}


#endif
